﻿using System;
using System.Reflection.Metadata;

namespace Lesson_1练习题
{
    //三杠注释：将光标移至被注释对象上时，显示注释内容

    /// <summary>
    /// QQ在线状态
    /// </summary>
    enum E_QQType
    {
        OnLine,
        Leave,
        Busy,
        InVisible,
    }

    /// <summary>
    /// 咖啡类型
    /// </summary>
    enum E_CoffeeType
    {
        Middle,
        Big,
        SuperBig,
    }

    /// <summary>
    /// 性别
    /// </summary>
    enum E_Sex
    {
        Male,
        Female,
    }

    /// <summary>
    /// 职业
    /// </summary>
    enum E_Occupation
    {
        Warrior,
        Hunter,
        Master,
    }
    class Program
    {
        static void Main(string[] args)
        {
            #region 练习一
            //1.定义QQ在线状态的枚举，并提示用户选择一个在线状态，接收输入的数字，并将其转成枚举类型
            try
            {
                Console.WriteLine("请输入在线状态（0在线 1离开 2忙碌 3隐身");
                int userInput = int.Parse(Console.ReadLine());      //此处不能使用ReadKey().KeyChar，因为转成int会存储为对应的ASCII码值
                E_QQType qqType = (E_QQType)userInput;
                Console.WriteLine(qqType);
            }
            catch
            {
                Console.WriteLine("请输入0~3之间的整数");
            }
            #endregion

            #region 练习二
            //2.用户去星巴克买咖啡，分为中杯（35元）大杯（40元）超大杯（43元）
            //请用户选择要购买的咖啡类型，输出：您购买了（）咖啡，花费了（）元
            try
            {
                Console.WriteLine("请输入要购买的咖啡类型（0中杯 1大杯 2超大杯）");
                int userInput = int.Parse(Console.ReadLine());
                E_CoffeeType coffeeType = (E_CoffeeType)userInput;
                switch (coffeeType)
                {
                    case E_CoffeeType.Middle:
                        Console.WriteLine("您购买了{0}咖啡，花费了{1}元", coffeeType, 35);
                        break;
                    case E_CoffeeType.Big:
                        Console.WriteLine("您购买了{0}咖啡，花费了{1}元", coffeeType, 40);
                        break;
                    case E_CoffeeType.SuperBig:
                        Console.WriteLine("您购买了{0}咖啡，花费了{1}元", coffeeType, 43);
                        break;
                    default:
                        Console.WriteLine("请输入0~2之间的整数");
                        break;
                }
            }
            catch
            {
                Console.WriteLine("请输入0~2之间的整数");
            }
            #endregion

            #region 练习三
            //请用户选择英雄性别与职业，输出英雄的基本属性
            //性别：
            //男（攻击力 + 50， 防御力 + 100）
            //女（攻击力 + 150， 防御力 + 20）
            //职业：
            //战士（攻击力 + 20， 防御力 + 100， 技能：冲锋）
            //猎人（攻击力 + 120， 防御力 + 30， 技能：假死）
            //法师（攻击力 + 200， 防御力 + 10，技能：奥术冲击）
            try
            {
                int atk = 0;
                int def = 0;
                string sexStr = "";         
                string occupationStr = "";
                string skillStr = "";
                Console.WriteLine("请选择英雄性别（0男 1女）");
                E_Sex Sex = (E_Sex)int.Parse(Console.ReadLine());
                switch (Sex)
                {
                    case E_Sex.Male:
                        atk += 50;
                        def += 100;
                        sexStr = "男性";
                        break;
                    case E_Sex.Female:
                        atk += 150;
                        def += 20;
                        sexStr = "女性";
                        break;
                    default:
                        Console.WriteLine("请正确输入");
                        break;
                }

                Console.WriteLine("请选择英雄职业（0战士 1猎人 2法师）");
                E_Occupation Occupation= (E_Occupation)int.Parse(Console.ReadLine());
                switch (Occupation)
                {
                    case E_Occupation.Warrior:
                        atk += 20;
                        def += 100;
                        occupationStr = "战士";
                        skillStr = "冲锋";
                        break;
                    case E_Occupation.Hunter:
                        atk += 120;
                        def += 30;
                        occupationStr = "猎人";
                        skillStr = "假死";
                        break;
                    case E_Occupation.Master:
                        atk += 200;
                        def += 10;
                        occupationStr = "法师";
                        skillStr = "奥术冲击";
                        break;
                    default:
                        Console.WriteLine("请正确输入");
                        break;
                }
                Console.WriteLine("您选择了\"{0}{1}\"，攻击力{2}，防御力{3}，习得技能{4}", sexStr, occupationStr, atk, def, skillStr);       //sexStr occupationStr skillStr必须先初始化，否则可能未赋值，从而报错
            }
            catch
            {

            }
            #endregion
        }
    }
}